[小ネタ] コンテナへAWS CLI v2をインストールする時にチョッとハマったこと
みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。
DockerやKubernetes (EKS) で検証を行う際に、コンテナ内でAWS CLIを使いたい場面がありました。
先月リリースされた AWS CLI v2 では別途Pythonやpipのインストールが不要になりましたので、こちらをコンテナにインストールしてみることにしました。
インストール自体は簡単に行えましたが・・・
今回は、ベースとなるコンテナイメージとしてAmazon Linux 2を使用しました。
Amazon Linux 2のDockerイメージを使ってコンテナを起動して、ログインします。
docker container run -it --rm amazonlinux:2 /bin/sh
AWSドキュメントの手順に従って、AWS CLI v2をインストールします。
Linux での AWS CLI バージョン 2 のインストール - AWS Command Line Interface
インストールする前に、Amazon Linux 2のDockerイメージには unzip
がインストールされていないため、先にインストールしておきます。
# yum install -y unzip
手順に従ってAWS CLI v2のアーカイブをダウンロードした後に解凍して、インストーラーを実行します。
# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" # unzip awscliv2.zip # ./aws/install
インストールされたことを確認します。
# aws --version aws-cli/2.0.5 Python/3.7.3 Linux/4.14.146-120.181.amzn2.x86_64 botocore/2.0.0dev9
アクセスキー等を設定します。
# aws configure AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Default region name [None]: ap-northeast-1 Default output format [None]:
何かコマンドを実行してみます。
# aws s3 ls 2020-03-03 01:59:50 demo-bucket-2020XXXX 2019-10-22 06:23:50 test-bucket-2019XXXX ・・・
上手く実行できたようですね。
別のコマンドを実行してみます。
# aws ec2 describe-instances [Errno 2] No such file or directory: 'less': 'less'
あれ?
何かエラーが出ました。
なんでエラーになるんだろう・・・? と少し悩みましたが、こちらのブログ記事を見て分かりました。
AWS CLI v2 でページ分割(less)を無効化できることを最近知った件 | Developers.IO
AWS CLI v2では、サブコマンドによってはページャー (ページ分割) が有効になっていて、デフォルトのページャーとして less
が使われるようになっているんですね。
そして、Amazon Linux 2のDockerイメージはデフォルトでは less
がインストールされていないため、エラーになったという訳です。
「"less" というファイルもディレクトリも無い」と言われたので何のことやら、と思ったのですが、まさか less
コマンドのこととは・・・
解決方法
丸毛のブログ記事のように、コンフィグや環境変数で less
を使わないようにするという方法もありますが、ここはズバリ「less
をインストールする」方法で解決することにします。
最初に unzip
をインストールしているところで、less
もインストールしてしまうのが良いでしょう。
# yum install -y unzip less
これでエラーが出なくなります。
# aws ec2 describe-instances { "Reservations": [ { "Groups": [], "Instances": [ { ・・・
(おまけ) Dockerfileを使ってDockerイメージを作成する場合
このような感じのDockerfileを記述しました:
FROM amazonlinux:2 WORKDIR /tmp RUN yum install -y unzip less && \ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ ./aws/install WORKDIR /root
Dockerイメージをビルド:
$ docker image build -t al2-awscliv2 .
イメージからコンテナを起動してログイン:
$ docker container run -it --rm al2-awscliv2 /bin/sh
これで、コンテナ内でAWS CLI v2が使えるようになりました。
(コンテナを使う際には、IAMロール等で適切なアクセス権限を付与しておいてくださいね)
おわりに
コンテナの検証などで本記事がお役に立てれば何よりです。